約 1,706,422 件
https://w.atwiki.jp/to_dk/pages/1286.html
SilverlightとWPFの質問と回答 △> Silverlight WPF = Windows Presentation Foundation >次に進む(ASP.NET) Silverlightの質問と回答 Silverlight - 共通フォーラム SilverLight5 でMediaelementでシークを許可していますがブラウザによって挙動が異なります。 (2015-07-06) MacにSilverlightが動きません (2015-06-24) silverlightでMacのブラウザの文字化け (2015-06-24) silverlightでMacのブラウザの表示が不安定 (2015-06-24) SilverLight5+VS2013 でWndprocを組み込みたい (2015-03-25) SilverLight5+VS2013 でコマンドラインパラメータを取得したい (2015-03-25) Google ChromeがNPAPIのサポートを終了 (2014-12-09) Silverlight - .NETフォーラム デバッグ用のリソース文字列は利用できません。 (2015-08-26) silverlight5で、システムエラーが発生しました。[Arg_ArgumentException]値が期待される範囲内にありません。 (2015-08-21) XAP署名の署名アルゴリズムのsha256対応 (2015-01-26) Childwindowでメモリリーク (2015-01-01) イベントの追加方法の違いについて (2014-09-02) MessageBoxが出力されない場合がある (2014-06-11) LocalMessageReceiver can not work in Safari7 (2014-03-31) WPF = Windows Presentation Foundationの質問と回答 WPF フォーラム 新着記事は見つかりませんでした。 >次に進む(ASP.NET) 関連する記事 SilverlightとWPFのニュース Visual C#の質問と回答 Visual Basicの質問と回答 ASP.NETの質問と回答 新着サポート、製品情報 タグ Visual Studioのニュース 製品ニュース Visual Basic質問と回答 Visual C#質問と回答 Visual C++質問と回答 SilverlightとWPF質問と回答 ASP.NETの質問と回答 プログラム作成のニュース ▼Visual Studio JavaScriptの質問と回答 perlの質問と回答 to_dk 最新情報の取得状況 上へ お役立ち度( - ) Copyright ©2008-2010 to_dk. _
https://w.atwiki.jp/atachi/pages/82.html
TextBoxへのバリデーション適応 バリデーションルールの作成 バリデーション失敗時のコントロールテンプレートを設定 TextBoxの設定 補足とか TextBoxへのバリデーション適応 入力値が不正 入力値が正しい バリデーションルールの作成 ValidationRuleクラスのサブクラスを作成し、Validateメソッドをオーバーライドします。 このメソッドが返すValidationResult型には、バリデーションが成功したか失敗したかのフラグを持ち、失敗時にはその理由を設定することができます。 下記のルールは入力値がカタカナで構成されているかどうかを判別するルールです。 namespace WpfTextBox { public class KatakanaRule ValidationRule { public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) { if (value is string) { string o = value as string; Regex regex = new Regex(@"^[ア-ヾ]+$"); if (!regex.IsMatch(o)) { return new ValidationResult(false, "カタカナ以外の文字が含まれています。"); } } else { return new ValidationResult(false,"文字が設定されていません"); } return new ValidationResult(true, null); } } } バリデーション失敗時のコントロールテンプレートを設定 WPFのTextBoxにはバリデーション失敗時の処理が含まれていません。 バリデーション失敗時に表示するレイアウトをコントロールテンプレートとしてリソースに定義します。 「icon_alert.gif」は検証失敗を促す「!」マークのアイコンです。フリーのものを借りました。 ControlTemplate x Key="TextBoxErrorTemplate" StackPanel StackPanel Orientation="Horizontal" Image Height="16" Margin="0,0,5,0" Source="/WpfTextBox;component/Assets/icon_alert.gif"/ AdornedElementPlaceholder x Name="Holder"/ /StackPanel Label Foreground="Red" Content="{Binding ElementName=Holder, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/ /StackPanel /ControlTemplate TextBoxの設定 最後にTextBoxに作成したバリデーションルールの設定と、バリデーション失敗時に表示するコントロールテンプレートを設定します。 TextBox Margin="10" Name="tbValidTest" VerticalAlignment="Top" Width="250" Validation.ErrorTemplate="{StaticResource TextBoxErrorTemplate}" TextBox.Text Binding Path="Label" Source="{StaticResource myobject}" UpdateSourceTrigger="PropertyChanged" Binding.ValidationRules my KatakanaRule / /Binding.ValidationRules /Binding /TextBox.Text /TextBox 補足とか 「{StaticResource myobject}」は下記のようなクラスを静的リソースとして定義したものです。 Labelプロパティだけをメンバに持ちます。 namespace WpfTextBox { public class MyData { public MyData(){ Label = ""; } public string Label { get; set; } } }
https://w.atwiki.jp/atachi/pages/28.html
XAMLの記述 [#g473e2c1] 属性の設定(属性構文) [#h71a06a8] 省略可能なプロパティ [#uece8203] テキストコンテンツ [#u9bf2fb3] マークアップ拡張書式 [#yba17a24] XAMLの構文定義について [#nedec8ff] 名前空間(x ) [#u379ac86] CLR名前空間をXAMLの名前空間から参照 [#zc8d4083] XAMLと分離コード [#f4ac851b] XAML内コード(インラインコード) [#ob04d859] リソース [#o78d48eb] リソースの定義方法 [#t78c704c] 任意のクラスのインスタンス コレクション ObjectDataProvider XmlDataProvider リソースの使用方法 [#y13c2f99] コードからリソースを参照する方法 [#p13e55bc] オブジェクトのツリー構造 [#se1e5f6c] VisualObject [#w2c1331e] XAMLの記述 XAMLでの各要素はそのままクラスコードに直結します。 XAMLでButton要素を使用する場合、Button要素の実体はSystem.Windows.Controls.Buttonクラスです。 そのためXAMLではXMLの要素をオブジェクト要素と呼んでいます。 属性の設定(属性構文) XMLの属性は、XAMLではオブジェクトのプロパティへ値を設定する意味を持ちます。 Button Text="Buttonです" / XAMLで記述されたこの内容は、次のようなC#コードと同じ意味を持ちます。 Button btn = new Button(); btn.Text = "Buttonです"; ただし、XAMLでの記述のすべてがC#コードの等価コードとして表現できません。 次のXAMLはBackgroundプロパティを設定していますが、見たとおりの解釈ではC#等価コードとしては表現できません。 Button Text="Buttonです" Background="Blue"/ Button btn = new Button(); btn.Text = "Buttonです"; btn.Background = "Blue"; // コンパイルエラー XAMLではBackgroundプロパティの値を文字列で設定していますが、ButtonクラスのBackgroundプロパティの型は文字列型ではないため、もしXAMLの見たままのコードをC#コードで記述しようとするとエラーが発生するのです。 ButtonクラスのBackgroundプロパティはBrush型です。 XAMLでは、与えられた「Blue」という文字を巧妙にBrush型に変換し(型コンバーター)、ButtonクラスのBackgroundプロパティへ設定しています。 属性の記述方法は、XMLの属性として記述する方法以外にも次のような記述方法ができます。 Button Button.Text Buttonです /Button.Text Button.Background SolidColorBrush Color="Blue"/ /Button.Background /Button このようなプロパティの記述方法をプロパティ要素と呼びます。 この記述内容は、説明してきたXAMLと同じ結果をもたらしますが、 Backgroundプロパティの設定ではSolidColorBrush要素を明示的に記述するなど、属性がどんな変換がなされているかが表現できています。 オブジェクトのプロパティを設定するにあたって、属性構文を使うかプロパティ要素を使うかはスタイルの問題で重要ではありません。 省略可能なプロパティ オブジェクト要素が持つプロパティの中には、 コンテンツプロパティ と呼ばれるプロパティが設定されているものがあります。 コンテンツプロパティは、プロパティ要素による記述で、ノードの記述を省略しても良いプロパティ要素です。 Border.Childはコンテンツプロパティなので省略しても良いことになっているため、前者のBorderは「 Border.Child 」のノードを省略しています。 次の2つのBorderはどちらも同じデザインです。 Border TextBox Width="300"/ /Border !--explicit equivalent(省略しない場合)-- Border Border.Child TextBox Width="300"/ /Border.Child /Border テキストコンテンツ Button要素のラベルに表示するテキストの設定はText属性で指定していましたが、Buttonのように文字列がコンテンツとして重要な意味を持つオブジェクト要素の中には、次のように記述できるものがあります。 Button Buttonです /Button マークアップ拡張書式 XAMLの属性には文字列としての意味を持つ値しか記述できませんが、画像などのリソースや表示したい内容を動的に変更(バインディング)したい場合があります。 属性にこのような特殊な方法で値を設定する方法としてマークアップ拡張機能があります。 マークアップ拡張機能を使うには、次のマークアップ拡張書式をXAMLの属性に記述します。 {拡張名 値 } {拡張名 キー1=値1,キー2=値2 ...} 拡張名 用途 説明 Binding データバインディング DynamicResource リソース参照 MultiBinding データバインディング PriorityBinding データバインディング TemplateBinding データバインディング RelativeSource データバインディング データバインディングでBinding.RelativeSourceプロパティに対してのみ使用できるマークアップ拡張 StaticResource リソース参照 定義済みのインスタンスを検索し、XAMLの属性値として使用する。(リソースについて) XAMLの構文定義について 用途 プレフィックス定義 定義の名前空間 XAMLの名前空間 xmlns http //schemas.microsoft.com/winfx/2006/xaml/presentation 追加の名前空間 xmlns x http //schemas.microsoft.com/winfx/2006/xaml リファレンス 名前空間(x ) ディレクティブ 説明 x Code インラインコードを記述する(詳細) x XData 属性 x Array x Class x ClassModifier x FieldModifier x Key x Name x Shared x Subclass x TypeArguments マークアップ拡張 説明 x Null XAML プロパティの値として null を指定する。 x Static x Type 指定した XAML 型の基になる型の CLR Type オブジェクトを指定します。 CLR名前空間をXAMLの名前空間から参照 xmlns属性に「clr-namespace ***」という書式で、CLR名前空間を参照するXAML名前空間を定義できる。 Window xmlns dn="clr-namespace System;assembly=mscorlib" ... /Window .NET Frameworksの名前空間をバインドすると便利かもしれない。 参照方法 説明 clr-namespace System;assembly=mscorlib Int16やDecimalといった基本型 clr-namespace System.Collections;assembly=mscorlib Listなどのコレクション型 XAMLと分離コード XAMLは、それ自体の追加の定義を分離コードで定義することができます。 Page xmlns="http //schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns x="http //schemas.microsoft.com/winfx/2006/xaml" x Class="ExampleNamespace.ExamplePage" /Page このようにx Class属性を使用して、このXAMLに対応したクラスをExampleNamespace.ExamplePageに実装します。 この場合、Pageオブジェクト要素の分離コードとなるため、ExampleNamespace.ExamplePageクラスはPageクラスをスーパークラスに設定しなければなりません。 namespace ExampleNamespace { public partial class ExamplePage Page { public ExamplePage() { InitializeComponent(); // 必須 } } } ExamplePageクラスに実装したメソッドやプロパティはXAMLから呼び出すことができます。また、XAMLで定義した名前付きのオブジェクト要素をExamplePageクラスから呼び出すこともできます。 動作的にはIDEによってXAMLファイルはC#コードにコンバートされます。 C#ではクラスの定義を複数のファイルに記述することができるクラス(パーシャルクラス)があるので、プログラマが記述するコードとツールが出力するコードを分けることができます。(上記のように分離コードではpartial修飾子をつけてクラスを定義している) XAML内コード(インラインコード) x Code要素を使ってXAML内にコードを記述することができます。 Page xmlns="http //schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns x="http //schemas.microsoft.com/winfx/2006/xaml" x Code ![CDATA[ void Clicked(object sender, RoutedEventArgs e) { button1.Content = "Hello World"; } ]] /x Code Button Name="button1" Click="Clicked" Click Me! /Button /Page インラインコードは短いロジックを記述するには便利ですが、使用にはいくつかの制限があります。 インターフェースとロジックとの切り分けが曖昧 プラグマの記述ができない(特に#ifdefがつかえないのは痛い) リソース リソースを使用するにはルート要素が持つResourcesプロパティを使用します。 外部リソースでは再利用可能なスタイルやインスタンスなどを定義したファイルをリソースとして定義しておくことができます。 外部リソースを1つだけ読み込む場合には、Resourcesに直接ResourceDictionary要素を子要素に追加していきます。 複数の外部リソースを読み込む場合は、次のようにリソースのマージを行います。 Window.Resources ResourceDirectory ResourceDirectory.MergedDictionaries ResourceDictionary Source="MyResource1.xaml" / ResourceDictionary Source="MyResource2.xaml" / ResourceDictionary Source="MyResource3.xaml" / /ResourceDirectory.MergedDictionaries /ResourceDirectory /Window.Resources 参考 MSDN リソースの概要 リソースの定義方法 任意のクラスのインスタンス Window.Resources SolidColorBrush x Key="resBrush" Color="Yellow" / /Window.Resources コレクション col ArrayList x Key="DataSource" sys DateTime 1/2/2003 5 00 00 /sys DateTime sys DateTime 4/5/2006 13 13 13 /sys DateTime sys DateTime 7/8/2009 23 59 59 /sys DateTime /col ArrayList .NET Frameworksのコレクションクラスを使用するために、XMLノードの属性にxmlns属性を使ってそれぞれのコレクションに名前をつけます。 上記のサンプルコードでのcolやsysといった名前空間は次の通りです。 xmlns sys="clr-namespace System;assembly=mscorlib" xmlns col="clr-namespace System.Collections;assembly=mscorlib" ObjectDataProvider Window.Resources !-- the customers datasource -- ObjectDataProvider x Key="CustomerDataProvider" ObjectType="{x Type local CustomerDataProvider}"/ ObjectDataProvider x Key="Customers" MethodName="GetCustomers" ObjectInstance="{StaticResource CustomerDataProvider}" / !-- the orders datasource -- ObjectDataProvider x Key="OrdersDataProvider" ObjectType="{x Type local OrdersDataProvider}"/ ObjectDataProvider x Key="Orders" MethodName="GetOrdersByCustomer" ObjectInstance="{StaticResource OrdersDataProvider}" ObjectDataProvider.MethodParameters x Static Member="system String.Empty"/ /ObjectDataProvider.MethodParameters /ObjectDataProvider /Window.Resources ObjectDataProviderはObjectInstanceに指定した任意のインスタンスからデータを取得する。 class MyData { public string[] GetNames() { return new string[] {"北海道","青森","秋田"}; } } XmlDataProvider XmlDataProvider x Key="MyDataSource" XPath="/Companies" x XData Companies xmlns="" Company Name Acme Inc. /Name Contact Name John Doe /Name PhoneNumber 111 /PhoneNumber PhoneNumber 222 /PhoneNumber /Contact Contact Name Billy Bob /Name PhoneNumber 333 /PhoneNumber PhoneNumber 444 /PhoneNumber /Contact /Company Company Name Large Corp. /Name /Company /Companies /x XData /XmlDataProvider リソースの使用方法 StaticResourceマークアップ拡張 コードからの利用 コードからリソースを参照する方法 ResourcesプロパティにアクセスするかFindResourceメソッドを使用します。 // Resourcesプロパティを使用してリソースを取得 SolidColorBrush scb = this.Resources["resBrush"] as SolidColorBrush; SolidColorBrush scb2 = this.Resources["resBrush2"] as SolidColorBrush; SolidColorBrush escb = this.FindResource("resBrush") as SolidColorBrush; Contract.Requires(scb == escb, "異なるリソースです"); ソースからリソースを参照できるので、次のようにXAMLで定義したリソースをソースコードから初期化して、任意のデータが初期化されたインスタンスをリソースとして定義できます。 public partial class MainPage UserControl{ public MainPage() { InitializeComponent(); MainData data = (MainData)Resources["mainDataDataSource"]; data.GridItemList = new List GridItem (); data.GridItemList.Add(new GridItem() { Id = "001", Name = "test001", Comment = "テスト001さんです。" }); data.GridItemList.Add(new GridItem() { Id = "002", Name = "test002", Comment = "テスト002さんです。" }); data.GridItemList.Add(new GridItem() { Id = "003", Name = "test003", Comment = "テスト003さんです。" }); data.GridItemList.Add(new GridItem() { Id = "004", Name = "test004", Comment = "テスト004さんです。" }); data.GridItemSelectIndex = 0; }} UserControl xmlns data="clr-namespace System.Windows.Controls;assembly=System.Windows.Controls.Data" x Class="BindingSample01.MainPage" xmlns="http //schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns x="http //schemas.microsoft.com/winfx/2006/xaml" xmlns d="http //schemas.microsoft.com/expression/blend/2008" xmlns mc="http //schemas.openxmlformats.org/markup-compatibility/2006" xmlns appDatas="clr-namespace BindingSample01.Datas" mc Ignorable="d" d DesignWidth="640" d DesignHeight="480" UserControl.Resources appDatas MainData x Key="mainDataDataSource"/ /UserControl.Resources Grid x Name="LayoutRoot" DataContext="{Binding Source={StaticResource mainDataDataSource} }" Grid.ColumnDefinitions ColumnDefinition Width="200"/ ColumnDefinition Width="*"/ /Grid.ColumnDefinitions data DataGrid Grid.Column="0" AutoGenerateColumns="False" ItemsSource="{Binding GridItemList, Mode=TwoWay}" SelectedIndex="{Binding GridItemSelectIndex, Mode=TwoWay}" data DataGrid.Columns data DataGridTextColumn Header="ID" Binding="{Binding Id, Mode=TwoWay}"/ data DataGridTextColumn Header="NAME" Binding="{Binding Name, Mode=TwoWay}"/ /data DataGrid.Columns /data DataGrid StackPanel Grid.Column="1" DataContext="{Binding GridItemSelectedItem, Mode=TwoWay}" TextBox Text="{Binding Id, Mode=TwoWay}" /TextBox TextBox Text="{Binding Name, Mode=TwoWay}" /TextBox TextBox Text="{Binding Comment, Mode=TwoWay}" /TextBox /StackPanel /Grid /UserControl オブジェクトのツリー構造 XAMLは次のようにXMLをネストしてレイアウトを作成します。 DockPanel Name="ParentElement" xmlns="http //schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns x="http //schemas.microsoft.com/winfx/2006/xaml" !--implicit DockPanel.Children -- ListBox DockPanel.Dock="Top" !--implicit ListBox.Items -- ListBoxItem TextBlock Dog /TextBlock /ListBoxItem ListBoxItem TextBlock Cat /TextBlock /ListBoxItem ListBoxItem TextBlock Fish /TextBlock /ListBoxItem !--implicit /ListBox.Items -- /ListBox Button Height="20" Width="100" DockPanel.Dock="Top" Buy a Pet /Button !--implicit /DockPanel.Children -- /DockPanel このツリー構造には、UIに関するノードとデータに関するノードが混じっています。 XAMLではこのような階層構造を論理ツリーと呼びます。 UIに関するノードだけを含めたものをビジュアルツリーと呼びます。 これらツリー構造はXMALに記述された構造がすべてではありません。 Buttonノードは次のようなビジュアルツリーを持ちます。 Button Chrome ContentPresenter StackPanel Image / TextBlock / /StackPanel /ContentPresenter /Chrome /Button VisualStudioのフォームエディタにはツールバーにButtonコントロールがあり、それを貼り付けるだけでボタンが表示されますが、ButtonコントロールはさらにImageコントロールやTextBlockコントロールによって構成されていることがわかります。 VisualObject コントロールやコンテナなどUIのレイアウトや操作に関する機能を持つコンポーネントをVisualObjectと呼びます。 XAMLによるフォームのレイアウトで、ビジュアルツリーはVisualObjectのノードだけ抽出してできたツリー構造を示します。 VisualObjectはSystem.Windows.Media.Visualクラスをスーパークラスにもつクラスのことです。
https://w.atwiki.jp/atachi/pages/44.html
参考サイト http //www.codeproject.com/KB/WPF/OutlookWpfCalendarPart1.aspx
https://w.atwiki.jp/janestyler/pages/12.html
Janeのexeアイコンを変更しよう 作者には申し訳ないが、Janeのexeアイコンがちょっとショボイ。 そこで、Janeのexeアイコンを変更して、プチオリジナルJaneっぽくしちゃおう。 まず、用意するものがあるのでDLしておきましょう。 IconReset(リソース変更) DL先:IconSet zip形式なので、適当な場所(C \Program Files\の中がいいかも)に解凍して下さい。 変更用アイコン JaneIconset これもzip形式なので適当な場所に解凍して下さい。 JaneのexeアイコンはUPX圧縮されているので、解凍するためにIconResetの設定をしましょう。 IconResetを起動してオプションのUPX設定をクリックします。 参照ボタンをクリックします。 UPXフォルダをクリックするとUPX.exeがある(1個しかないのですぐ分かると思う)のでダブルクリックします。 そしたら、そのままOKボタンをクリックしてUPXの設定は完了です。 次にアイコンを変更します。 開くボタンクリックして、Jane2ch.exeをダブルクリックします。 アイコンが1個だけ表示されていると思います。 それをダブルクリックして設定したいアイコンをダブルクリックします。 あとは保存ボタンを押すと、“上書き保存しますか?”のダイアログが出るのでOKをクリックして完了です。 バージョンアップ対応のために、batファイルを作っておきましょう。 まず、設定したアイコンファイルをjane2ch.exeのあるフォルダにコピーしておきます。 テキストエディッタで "C \Program Files\IconReset\IconReset.exe"(IconReset.exeを解凍したパス) Jane2ch.exe -in jane_icon_kuro.ico(アイコンのファイル名) 名前をicon.batみたいにしてjane2ch.exeのあるフォルダに保存します。 これで、バージョンアップ対策も完了です。
https://w.atwiki.jp/atachi/pages/29.html
イベントのアタッチ [#q1f4c985] コードによるイベントのアタッチ [#h3e8df39] イベントルーティング [#c831d229] トンネル型イベント [#cb80da22] バブル型イベント [#xc5fd69e] ダイレクト型イベント [#facd7b59] 処理済みフラグ(Handled) [#ccefc0a2] 入力イベントのルーティング [#bc973d5e] イベントのアタッチ 通常のUIではイベントソースとイベントリスナは同じオブジェクトとなります。 (イベントソースとはイベントの発生源) (イベントリスナとはイベントをアタッチしたオブジェクト) Panel Button Click="onClickMyButton" Text="Button" / /Panel /** * ButtonがClickイベントを受け取ったときの実行関数 */ private void onClickMyButton(object sender,RoutedEventArgs e) { // ユーザーによってボタンがクリックしたときの処理 } イベントはルーティングによって伝播されるので、次のサンプルのようにButton要素の親要素であるPanel要素でもButton要素が受け取るイベントを受け取ることができます。 Panel Button.Click="onClickCommonButton" Button Text="Button1" / Button Text="Button2" / /Panel private void onClickCommonButton(object sender,RoutedEventArgs e) { // ユーザーによってボタンがクリックしたときの処理 } この場合、ユーザーがButton1をクリックしてもButton2をクリックしても、onClickCommonButtonハンドラが呼び出されます。 コードによるイベントのアタッチ XAMLに「button1」という名前で定義してあるButton要素に、分離コードでClickイベントをアタッチします。 namespace My { public partial class MainWindow Window { public MainWindow() { InitializeComponent(); // XAMLで定義したbutton1へClickイベントをアタッチ this.button1.Click += new RoutedEventHandler( onClickButton1 ); // イベントへエンティティを追加 // ↑または、次のようなサポートメソッドを使う // this.AddHandler( Button.ClickEvent, new RoutingEventHandler(onClickButton1) ); } private void onClickButton1(object sender, RoutedEventArgs e) { } } } イベントのアタッチ方法が2種類あるが、どちらも中身は同じ。 「button1.Click」はButton.Clickイベントで、この定義は次のようになっている。 public event RoutedEventHandler Click { add { this.AddHandler( Button.ClickEvent, value); } remove { this.AddHandler( Button.ClickEvent, value); } } イベントルーティング バブル型とはイベントを最初に発行したVisualObjectから親へ向かって伝播するイベントで、プログラマが実装するユーザーインターフェースに関するイベントの大半がバブル型イベントです。 トンネル型はバブル型の逆で、イベントを最初に発行したVisualObjectから子へ向かって伝わっていくイベントです。アプリケーションの内部ロジックによって発行される事が多く、VisualObjectにアプリケーションの状態を伝える目的で使用する。 直接型は、イベントはターゲットにのみ発行されるイベントで、バブル型やトンネル型のようなイベントのルーティングは行われません。 Border Height="50" Width="300" BorderBrush="Gray" BorderThickness="1" StackPanel Background="LightGray" Orientation="Horizontal" Button.Click="CommonClickHandler" Button Name="YesButton" Width="Auto" Yes /Button Button Name="NoButton" Width="Auto" No /Button Button Name="CancelButton" Width="Auto" Cancel /Button /StackPanel /Border YesButtonのボタンがクリックされた場合、フレームワークはButtonに対してClickイベントを発行します。 しかし、サンプルのようにClickイベントに対するハンドラがアタッチされていない場合、処理されなかったイベントは親要素であるStackPanelに送られます。 トンネル型イベント UIElementが次のようなツリー構造の場合に、イベントを発行した際にイベントが伝播していく様子を示したものです。 階層構造を構成 r0 └─r1 └─r2 (← ここでイベントを発行する) └─r3 トンネル型のイベントは次の順番に伝播します。 r0 → r1 → r2 特筆すべきは、r2をイベントソースとしたにもかかわらず、トンネル型のイベントルーティングは上位階層のイベントから呼び出されているということです。 この動作を検証するためのソースコードです。 /// summary /// ButtonBaseから実装をコピー /// /summary class RoutedContent ContentControl { /// summary /// AddHandler()で追加できるイベントの種類 /// /summary public static readonly RoutedEvent MyRoutingEvent; static RoutedContent() { MyRoutingEvent = EventManager.RegisterRoutedEvent("MyRouting", RoutingStrategy.Tunnel, // トンネル型のイベントであることを設定 typeof(RoutedEventArgs), typeof(RoutedContent)); } /// summary /// CLIイベント /// /summary public event RoutedEventHandler MyRouting { add { base.AddHandler(MyRoutingEvent, value); } remove { base.RemoveHandler(MyRoutingEvent, value); } } /// summary /// イベントの実行 /// /summary /// param name="e" /param protected void fire_MyRoutingEvent(RoutedEventArgs e) { base.RaiseEvent(e); } /// summary /// 外部からインスタンスを使ってイベントを発行するための関数 /// /summary public void fire() { RoutedEventArgs e = new RoutedEventArgs(MyRoutingEvent, this); fire_MyRoutingEvent(e); } } class Program { [STAThread] static void Main(string[] args) { RoutedContent r0 = new RoutedContent(); r0.Name = "r0"; RoutedContent r1 = new RoutedContent(); r1.Name = "r1"; RoutedContent r2 = new RoutedContent(); r2.Name = "r2"; RoutedContent r3 = new RoutedContent(); r3.Name = "r3"; // 階層構造を構成 // r0 // └─r1 // └─r2 // └─r3 r0.Content = r1; r1.Content = r2; r2.Content = r3; // イベントにアタッチ r0.MyRouting += new RoutedEventHandler(onMyRouting); r1.MyRouting += new RoutedEventHandler(onMyRouting); r2.MyRouting += new RoutedEventHandler(onMyRouting); r3.MyRouting += new RoutedEventHandler(onMyRouting); // ルート要素から2番目に位置する「r2」でイベントを発行する r2.fire(); Console.ReadLine(); } private static void onMyRouting(object sender, RoutedEventArgs e) { ContentControl obj = (ContentControl)sender; Console.WriteLine("イベント名={0}", e.RoutedEvent.Name); Console.WriteLine("リスナーのオブジェクト={0}", obj.Name); Console.WriteLine(); } } バブル型イベント UIElementが次のようなツリー構造の場合に、イベントを発行した際にイベントが伝播していく様子を示したものです。 階層構造を構成 r0 └─r1 └─r2 (← ここでイベントを発行する) └─r3 バブル型のイベントは次の順番に伝播します。 r2 → r1 →r0 /// summary /// ButtonBaseから実装をコピー /// /summary class RoutedContent ContentControl { /// summary /// AddHandler()で追加できるイベントの種類 /// /summary public static readonly RoutedEvent MyRoutingEvent; static RoutedContent() { MyRoutingEvent = EventManager.RegisterRoutedEvent("MyRouting", RoutingStrategy.Bubble, // バブル型のイベントであることを設定 typeof(RoutedEventArgs), typeof(RoutedContent)); } /// summary /// CLIイベント /// /summary public event RoutedEventHandler MyRouting { add { base.AddHandler(MyRoutingEvent, value); } remove { base.RemoveHandler(MyRoutingEvent, value); } } /// summary /// イベントの実行 /// /summary /// param name="e" /param protected void fire_MyRoutingEvent(RoutedEventArgs e) { base.RaiseEvent(e); } /// summary /// 外部からインスタンスを使ってイベントを発行するための関数 /// /summary public void fire() { RoutedEventArgs e = new RoutedEventArgs(MyRoutingEvent, this); fire_MyRoutingEvent(e); } } class Program { [STAThread] static void Main(string[] args) { RoutedContent r0 = new RoutedContent(); r0.Name = "r0"; RoutedContent r1 = new RoutedContent(); r1.Name = "r1"; RoutedContent r2 = new RoutedContent(); r2.Name = "r2"; RoutedContent r3 = new RoutedContent(); r3.Name = "r3"; // 階層構造を構成 // r0 // └─r1 // └─r2 // └─r3 r0.Content = r1; r1.Content = r2; r2.Content = r3; // イベントにアタッチ r0.MyRouting += new RoutedEventHandler(onMyRouting); r1.MyRouting += new RoutedEventHandler(onMyRouting); r2.MyRouting += new RoutedEventHandler(onMyRouting); r3.MyRouting += new RoutedEventHandler(onMyRouting); // ルート要素から2番目に位置する「r2」でイベントを発行する r2.fire(); Console.ReadLine(); } private static void onMyRouting(object sender, RoutedEventArgs e) { ContentControl obj = (ContentControl)sender; Console.WriteLine("イベント名={0}", e.RoutedEvent.Name); Console.WriteLine("リスナーのオブジェクト={0}", obj.Name); Console.WriteLine(); } } ダイレクト型イベント UIElementが次のようなツリー構造の場合に、イベントを発行した際にイベントが伝播していく様子を示したものです。 階層構造を構成 r0 └─r1 └─r2 (← ここでイベントを発行する) └─r3 ダイレクト型イベントは伝播しないので、イベントを発行したイベントソースのみが対象になります。 r2 処理済みフラグ(Handled) ハンドラの引数であるRoutedEventArgsに定義されているHandledプロパティを使用すると、イベントルーティングを制御できます。 ハンドラ内でHandledプロパティをtrueにセットした場合、それ以降のイベントルーティングは呼び出されません。 通常のインターフェース設計ではHostedフラグは明示的にtrueに設定しておく方がよいです。( たとえば、ButtonコントロールのClickイベントをアタッチした場合、アタッチしたハンドラで目的としたロジックを実装するので、イベントハンドリングによって親がこのイベントを処理する必要はないはずです。 入力イベントのルーティング 入力系のイベントでは、トンネル型とバブル型の2つのイベントタイプが対になって動作しており、この仕組みはユーザーの入力を処理する上で非常に重要な仕組みです。 キーボードからの入力があった場合、イベントソースはトンネル型イベントであるPreviewKeyDownイベントを発行します。 トンネル型イベントのハンドラが呼び出される順はルート要素側から順番なので、イベントソースまでの経路でPreviewKeyDownイベントがHandledされた場合、それ以降の要素にイベントはルーティングされません。 つまり、キーボードからの入力を検証し処理すべきでない場合はHandledフラグをセットすれば、それ以降のイベントとバブル型イベント(KeyDownイベント)が実行されないことを意味します。 イベントルーティングによって各イベントタイプでロジックを棲み分けることができます。 トンネル型イベントでは、入力値の検証のためのロジックを実装 バブル型イベントでは、入力に対する応答のためのロジックを実装
https://w.atwiki.jp/wpfapp/pages/4.html
ニュース @wikiのwikiモードでは #news(興味のある単語) と入力することで、あるキーワードに関連するニュース一覧を表示することができます 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_174_ja.html たとえば、#news(wiki)と入力すると以下のように表示されます。 【カウンターサイド】リセマラ当たりランキング - カウサイ攻略Wiki - Gamerch(ゲーマチ) ウィキペディアを作ったiMacが箱付きで競売に登場。予想落札価格は約96万円!(ギズモード・ジャパン) - Yahoo!ニュース - Yahoo!ニュース 終末のアーカーシャ(終アカ)攻略wiki - Gamerch(ゲーマチ) メトロイド ドレッド攻略Wiki - Gamerch(ゲーマチ) 【まおりゅう】最強パーティー編成とおすすめキャラ【転スラアプリ】 - Gamerch(ゲーマチ) 【グランサガ】リセマラ当たりランキング - グランサガ攻略wiki - Gamerch(ゲーマチ) アイプラ攻略Wiki|アイドリープライド - AppMedia(アップメディア) マニュアル作成に便利な「画像編集」機能を提供開始! - ナレッジ共有・社内wikiツール「NotePM」:時事ドットコム - 時事通信 マニュアル作成に便利な「画像編集」機能を提供開始! - ナレッジ共有・社内wikiツール「NotePM」 - PR TIMES 【アイプラ】リセマラは必要?当たりキャラランキング【IDOLY PRIDE】 - Gamerch(ゲーマチ) 篠原悠希×田中芳樹が明かす「歴史ファンタジー小説ならではの悩み」(現代ビジネス) - Yahoo!ニュース - Yahoo!ニュース 【Apex Legends】ヴァルキリーの能力と評価【エーペックス】 - Gamerch(ゲーマチ) モンハンライズ攻略Wiki|MHRise - AppMedia(アップメディア) 【ウインドボーイズ】リセマラ当たりランキング(最新版) - ウインドボーイズ攻略Wiki - Gamerch(ゲーマチ) ポケモンBDSP(ダイパリメイク)攻略wiki - AppMedia(アップメディア) SlackからWikiへ!シームレスな文章作成・共有が可能な「GROWIBot」リリース - アットプレス(プレスリリース) 【ウマ娘】ナリタブライアンの育成論|URAシナリオ - Gamerch(ゲーマチ) 【ウマ娘】ヒシアケボノの育成論|URAシナリオ - Gamerch(ゲーマチ) 【ウマ娘】フジキセキの育成論|URAシナリオ - Gamerch(ゲーマチ) ドラゴンクエストけしケシ攻略Wiki - Gamerch(ゲーマチ) サモンズボード攻略wiki - GameWith 【スタオケ】カード一覧【金色のコルダスターライトオーケストラ】 - Gamerch(ゲーマチ) 【スマブラSP】ソラのコンボと評価【スマブラスペシャル】 - Gamerch(ゲーマチ) 【ブレフロレゾナ】リセマラ当たりランキング【ブレイブフロンティアレゾナ】 - ブレフロR攻略Wiki - Gamerch(ゲーマチ) 【ガーディアンテイルズ】ギルドレイド戦(秘密の研究所)の攻略とおすすめキャラ【ガデテル】 - Gamerch(ゲーマチ) 仲村トオル、共演者は事前に“Wiki調べ”(オリコン) - Yahoo!ニュース - Yahoo!ニュース 【ENDER LILIES】攻略チャートと全体マップ【エンダーリリィズ】 - Gamerch(ゲーマチ) 【ウマ娘】あんしん笹針師の選択肢はどれを選ぶべき? - Gamerch(ゲーマチ) 【ポケモンユナイト】アップデート情報・キャラ調整まとめ - ポケモンユナイト攻略Wiki - Gamerch(ゲーマチ) 【Apex】シーズン11の新要素と最新情報まとめ【エーペックス】 - Gamerch(ゲーマチ) ロストジャッジメント攻略Wiki - Gamerch(ゲーマチ) 【Among us】新マップThe Airship(エアシップ)の解説【アモングアス】 - Gamerch(ゲーマチ) ハーネスについて小児科医の立場から考える(坂本昌彦) - 個人 - Yahoo!ニュース - Yahoo!ニュース ゼルダ無双攻略Wiki|厄災の黙示録 - AppMedia(アップメディア) 【テイルズオブルミナリア】リセマラ当たりランキング - TOルミナリア攻略Wiki - Gamerch(ゲーマチ) 【ポケモンユナイト】ユナイトライセンスの入手方法まとめ - AppMedia(アップメディア) ウマ娘攻略Wiki - AppMedia(アップメディア) ゲトメア(ゲートオブナイトメア)攻略Wiki - Gamerch(ゲーマチ) 【白夜極光】リセマラ当たりランキング - 白夜 極光 wiki - Gamerch(ゲーマチ) お蔵入りとなった幻の『スーパーマリオ』 オランダの博物館でプレイ可能?(リアルサウンド) - Yahoo!ニュース - Yahoo!ニュース ナレッジ共有・社内wikiツール「NotePM」が「ITreview Best Software in Japan 2021」のTOP50に選出 - PR TIMES 真女神転生5攻略Wiki|メガテン5 - AppMedia(アップメディア) 【B4B】近接ビルドデッキにおすすめのカード【back4blood】 - Gamerch(ゲーマチ) ポケモンスナップ攻略wiki - AppMedia(アップメディア) 富野由悠季「ブレンパワード」作り直したい!ファンを前に意欲(シネマトゥデイ) - Yahoo!ニュース - Yahoo!ニュース 【スマブラSP】カズヤの評価とコンボ【スマブラスペシャル】 - Gamerch(ゲーマチ) ナレッジ共有・社内wiki「NotePM」が「ITreview Grid Award 2021 Fall」で、チームコラボレーションとマニュアル作成部門において「Leader」を5期連続でW受賞! - PR TIMES メモ・ドキュメント・wiki・プロジェクト管理などオールインワンのワークスペース「Notion」が日本語ベータ版提供開始 - TechCrunch Japan 【ギアジェネ】リセマラ当たりランキング【コードギアス】 - ギアジェネ攻略Wiki - Gamerch(ゲーマチ) モンスターファーム2(MF2)攻略wiki|アプリ・Switch移植版 - AppMedia(アップメディア) 【ブラサジ】最強キャラTierランキング【ブラックサージナイト】 - Gamerch(ゲーマチ) 【パワプロ】鬼滅の刃コラボ情報まとめ - Gamerch(ゲーマチ) 【SPAJAM2021】第3回予選大会は「クイズ!WIKIにゃんず!」を開発したチーム「かよちゃんず」が最優秀賞! | gamebiz - SocialGameInfo 検索結果における「ナレッジパネル」の役割とは・・・ウィキメディア財団とDuckDuckGoの共同調査 - Media Innovation 【ウマ娘】解放結晶の入手方法と使い方 - Gamerch(ゲーマチ) ナレッジ共有・社内wikiツール「NotePM」が「BOXIL SaaS AWARD 2021 Autumn」にて「コラボレーション部門」を受賞! - PR TIMES 「ゼルダの伝説 BotW」のマラソンで23秒? 驚きの速さで完走した方法が話題(リアルサウンド) - Yahoo!ニュース - Yahoo!ニュース Wikipediaが「中国人編集者の身の安全を守るため」に一部の編集者アカウントをBANに - GIGAZINE 【ドッカンバトル】3.5億ダウンロードキャンペーン最新情報 - ドッカンバトル攻略Wiki - Gamerch(ゲーマチ) BTS(防弾少年団)のV、8月のWikipedia閲覧数が韓国アーティストで1位!グループでは4ヶ月連続トップ - Kstyle 【イース6オンライン】リセマラ当たりランキング|召喚ガチャの開放条件は? - Gamerch(ゲーマチ) 『復活のルルーシュ』の後を描くアプリ『コードギアス』新情報公開。古代中華を観測する『血盟の紅羽』などが展開 - 電撃オンライン BacklogからNotePMへwiki情報を自動API連携する「Backlog to NotePM」をSaaStainerに掲載開始 - PR TIMES ライザのアトリエ2攻略Wiki - AppMedia(アップメディア) 真女神転生3リマスター攻略Wiki|メガテン3 - AppMedia(アップメディア) タスクも文書もWikiもデータベースもまとめて管理できる「Notion」とは? - ASCII.jp ナレッジ共有・社内wikiツール「NotePM」が、見るだけ専用ユーザー『無料』の新プランを発表! - PR TIMES 【かのぱず】リセマラ当たりランキング【彼女お借りします】 - Gamerch(ゲーマチ) 【乃木フラ】リセマラの必要はある?【乃木坂的フラクタル】 - Gamerch(ゲーマチ) 【パワプロ】生放送まとめ|パワフェス2021 - パワプロ攻略Wiki - Gamerch(ゲーマチ) 【ポケモンユナイト】サーナイトのおすすめビルド(わざ・持ち物) - Gamerch(ゲーマチ) ルーンファクトリー5攻略wiki|ルンファク5 - AppMedia(アップメディア) シャーマンキングふんばりクロニクル攻略Wiki - Gamerch(ゲーマチ) アーテリーギア‐機動戦姫-攻略Wiki - Gamerch(ゲーマチ) 簡単操作で自分専用Wikiを構築できるMarkdownエディタ「Obsidian」のモバイル版を使ってみた - GIGAZINE 【東京リベンジャーズ】場地圭介の声優情報と注目ポイントをご紹介!|編集部コラム - AppMedia(アップメディア) 情報マネジメントツール「Huddler」がwiki機能を刷新 - PR TIMES シェアエコ配送アプリ「DIAq(ダイヤク)」のアンカーアプリで、高層ビル・商業施設の入館方法などお役立ち情報をまとめた「DIAqwiki」を公開 - アットプレス(プレスリリース) 【ツイステ】マスターシェフの攻略~辛味のふるさと~【料理イベント】 - Gamerch(ゲーマチ) 【ラグナロクオリジン】リセマラは不要?おすすめ職業は?【ラグオリ】 - Gamerch(ゲーマチ) 白夜極光攻略wiki - AppMedia(アップメディア) 【バイオミュータント】2.02アプデ|アップデート1.4情報 - バイオミュータント攻略Wiki - Gamerch(ゲーマチ) ニーアレプリカントリメイク攻略wiki|ver.1.22 - AppMedia(アップメディア) 【ウマ娘】ゴルシウィークはいつから?キャンペーン情報まとめ - Gamerch(ゲーマチ) シーズン66 - 【超速GP】ミニ四駆 超速グランプリ攻略まとめwiki - 電撃オンライン 乃木坂的フラクタル攻略Wiki - Gamerch(ゲーマチ) 「こんなことになるとは…」13年前のエイプリルフールについた“嘘”がネットで… ある男の告白(BuzzFeed Japan) - Yahoo!ニュース - Yahoo!ニュース 整理不要の情報共有ツール(社内Wiki)「Nerve」シードラウンドで総額約3500万円の資金調達を実施 - PR TIMES Nerve - 整理不要の情報共有ツール(社内Wiki) ローンチカスタマー募集開始のお知らせ - PR TIMES Among Us攻略Wiki【アマングアス・アモングアス】 - Gamerch(ゲーマチ) 稲作アクションRPG『天穂のサクナヒメ』における「農林水産省攻略wiki説」は本当なのか? - AUTOMATON 無料とは思えない多機能っぷりなWikiインフラ「Wiki.js」レビュー、自前でホスト&外部サービスと連携可能 - GIGAZINE Microsoft Teamsの基本と活用(24) TeamsのWikiを使う - マイナビニュース 『ゲーミングお嬢様』での提起が話題に “企業系wiki”に横たわる問題点とは - リアルサウンド 「エイリアンのたまご」,自動周回機能と公式wikiが登場 - 4Gamer.net 【リゼロス】Re ゼロから始める異世界生活 Lost in Memories攻略まとめwiki - 電撃オンライン ヌーラボ、プロジェクト管理ツール「Backlog」の絵文字入力の補完機能・Wiki編集の自動マージ機能を修正改善 - PR TIMES Backlog、Wikiにファイル添付が容易にできる機能をリリース -- グローバルバーの視認性改善なども実施 - PR TIMES GK川島、パンチング失点でWiki書き換え炎上 「セネガル代表」「プロボクサー」... - J-CASTニュース 「ウィキ」の「寄付バナー」がデカすぎ 「広告にしたら?」の声、元管理者にぶつけると... - J-CASTニュース
https://w.atwiki.jp/wpfapp/pages/7.html
アーカイブ @wikiのwikiモードでは #archive_log() と入力することで、特定のウェブページを保存しておくことができます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/25_171_ja.html たとえば、#archive_log()と入力すると以下のように表示されます。 保存したいURLとサイト名を入力して"アーカイブログ"をクリックしてみよう サイト名 URL
https://w.atwiki.jp/wpfapp/pages/6.html
更新履歴 @wikiのwikiモードでは #recent(数字) と入力することで、wikiのページ更新履歴を表示することができます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_117_ja.html たとえば、#recent(20)と入力すると以下のように表示されます。 取得中です。
https://w.atwiki.jp/wpfapp/pages/11.html
コメントプラグイン @wikiのwikiモードでは #comment() と入力することでコメントフォームを簡単に作成することができます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_60_ja.html たとえば、#comment() と入力すると以下のように表示されます。 名前 コメント